Computing devices can exchange digital data through communications transmitted across computer networks to which such computing devices are communicationally coupled via network interface hardware. Traditionally, to communicate digital data from a sending computing device to a receiving computing device across a network, network interface hardware of the sending computing device receives a copy of the digital data to be transmitted, and then transmits such digital data, in accordance with relevant network communication protocols, to the receiving computing device, whose network interface hardware receives the digital data, a copy of which can then be further made, on the receiving computing device, in order to enable processes, executed by a general-purpose central processing unit of such a receiving computing device, to access the received data. Consequently, the transmission of digital data can involve the making of multiple copies of such data, both at the sending computing device, and at the receiving computing device.
Remote direct memory access communications can enable a sending computing device to transmit data without first making a copy of such data for the network interface hardware on such a sending computing device. Instead, remote direct memory access communications can enable the network interface hardware of a sending computing device to access data directly from memory in which such data was stored by an application program seeking to transmit such data across the network. Remote direct memory access communications can also enable the network interface hardware of the sending computing device to write data directly into the memory of a receiving computing device, via the network interface hardware of the receiving computing device, but without making an additional copy on the receiving computing device.
While remote direct memory access communications can enable more efficient communication of digital data between a sending computing device and a receiving computing device across a computer network, such efficiencies can be sub-optimally realized, or even negated, if the communication of digital data is not coordinated properly. Traditional coordination mechanisms, often referred to as “flow control” mechanisms, or protocols, rely on functionality, implemented by the network interface hardware, that is not universal across multiple different types of network interface hardware, rendering such traditional coordination mechanisms only applicable in homogenous network interface hardware environments. Other traditional flow control mechanisms rely on the maintenance of credits of available, equivalently-sized buffers into which digital data, being communicated across the network, can be written. But such equivalently sized buffers can result in data fragmentation, or can yield inefficiencies if the data being transmitted is smaller than the buffer, often resulting in the transmission of meaningless filler data.